package com.example.stream;

import org.springframework.http.converter.json.GsonBuilderUtils;

import java.util.function.Function;
import java.util.stream.Stream;

public class Streams {

    public static void main(String[] args) {

        /**
         *jdk8 流编程案例
         * 元素的中间操作与终止操作
         * 结果： 依次输出 b,e,l,o
         */
        String[] arr={"react","","react","spring","bo_le","webflux","spring","bo_le"};

        Stream.of(arr).distinct()
                .filter(i->!i.isEmpty())
                .sorted()
                .limit(2)
                .map(new Function<String, String>() {
                    @Override
                    public String apply(String i) {
                        System.out.println();
                        return i.replace("_", "");
                    }
                })    //map 传进去什么返回一个什么，
                .flatMap(new Function<String, Stream<? extends String>>() {
                    @Override
                    public Stream<? extends String> apply(String i) {
                        return Stream.of(i.split(""));
                    }
                })
                .sorted()
                .forEach(System.out::println);

        //jdk8 流的概念可以这么理解，想象有一个管道，有很多个字符串，每一项操作都是对管道里的每个字符串进行操作，有的是判断字符串是不是为空，有的是需要把管道内的字符串进行排序，
        //filter就是对字符串进行判断，然后从管道中删除或留下
        //sorted就是对管道内的字符串进行排序
        //limit 就是取管道中最靠前的那几个字符串
        //map是将管道中的每个字符串进行转换，转成别的字符串
        //flatmap是将每个字符串转换成流也就是小的管道套在大的管道里



    }
}
